package com.example.chapter06;

import android.app.Application;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.room.Room;

import com.example.chapter06.database.BookDatabase;
import com.example.chapter06.database.ShoppingDBHelper;
import com.example.chapter06.entity.GoodsInfo;
import com.example.chapter06.util.FileUtil;
import com.example.chapter06.util.SharedUtil;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

public class MyApplication extends Application {

    private static MyApplication mApp;

    //声明一个公共的信息映射对象，可当作全局变量使用
    public HashMap<String, String> infoMap = new HashMap<>();

    public static MyApplication getInstance() {
        return mApp;
    }

    //声明一个书籍数据库对象
    private BookDatabase bookDatabase;

    //购物车中的商品数量
    public int goodsCount;

    //在App启动时调用
    @Override
    public void onCreate() {
        super.onCreate();
        mApp = this;

        //构建书籍数据库的实例
        bookDatabase = Room.databaseBuilder(this, BookDatabase.class,"book")
                //允许迁移数据库（发生数据库变更时，Room默认删除原数据库再创建新数据库。如此一来原来的记录会丢失，迁移
                // 方式不会丢失）
                .addMigrations()
                //允许在主线程中操作数据库(Room默认不能在主线程中操作数据库)
                .allowMainThreadQueries()
                .build();


        //初始化商品信息
        initGoodsInfo();
    }

    private void initGoodsInfo() {
        //获取共享参数保存的是否首次打开参数
        boolean isFirst = SharedUtil.getInstance(this).readBoolean("first", true);
        //获取当前App的私有下载路径
        String directory = Objects.requireNonNull(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS))
                .toString() + File.separatorChar;
        if(isFirst){
            //模拟网络图片下载
            List<GoodsInfo> list = GoodsInfo.getDefaultList();
            for (GoodsInfo info : list) {
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), info.getPic());
                String path = directory + info.getId() + ".jpg";
                //往存储卡保存商品图片
                try {
                    FileUtil.saveImage(path,bitmap);
                } catch (IOException e) {
                    Log.e("liu","存储卡保存商品图片失败");
                }
                //回收位图对象
                bitmap.recycle();
                info.setPicPath(path);
            }
            //打开数据库，把商品信息插入到表中
            ShoppingDBHelper dbHelper = ShoppingDBHelper.getInstance(this);
            dbHelper.openWriteLink();
            dbHelper.insertGoodsInfo(list);
            dbHelper.closeLink();
            //把是否首次打开写入共享参数
            SharedUtil.getInstance(this).writeBoolean("first",false);
        }
    }

    //在App终止的时候调用
    //在系统开发时才能用，在APP开发时不会调用
    @Override
    public void onTerminate() {
        super.onTerminate();

    }

    //在配置改变时调用，例如从竖屏变成横屏
    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

    }

    //获取书籍数据库的实例
    public BookDatabase getBookDB(){
        return bookDatabase;
    }
}
